package net.sansi.v3correctserver.controller;

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import net.sansi.v3correctserver.dto.CmmDto;
import net.sansi.v3correctserver.dto.R;
import net.sansi.v3correctserver.dto.project.ProjectDto;
import net.sansi.v3correctserver.entity.space.ProjectSpaceCnf;
import net.sansi.v3correctserver.service.project.ProjectService;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.List;

/**
 * Created by Fang
 * create time : 2024/11/1
 * IDE : IntelliJ IDEA
 */

@Api(tags = "项目接口")
@RestController
@RequestMapping("/project")
public class ProjectController {

    @Resource
    private ProjectService projectService;

    /**
     * 项目列表
     *
     * @return 项目列表
     */
    @ApiOperation("项目列表")
    @GetMapping("/list")
    public R<List<ProjectSpaceCnf>> list() {
        return R.data(projectService.listProjectSpaceCnf());
    }

    /**
     * 添加项目
     *
     * @param cnf 项目信息
     * @return 项目信息
     */
    @ApiOperation("添加项目")
    @PostMapping("/add")
    public R<ProjectSpaceCnf> add(@RequestBody @Validated ProjectSpaceCnf cnf) {
        return R.data(projectService.saveProjectSpaceCnf(cnf));
    }

    /**
     * 删除项目
     *
     * @param ids 项目ID
     * @return 是否删除
     */
    @ApiOperation("删除项目")
    @PostMapping("/remove")
    public R<String> remove(@RequestBody @Validated CmmDto.Ids<String> ids) {
        projectService.removeByIds(ids.getIds());
        return R.success();
    }

    /**
     * 修改项目基本信息
     *
     * @param cnf 项目信息
     * @return 项目信息
     */
    @ApiOperation("修改项目基本信息")
    @PostMapping("/update")
    public R<ProjectSpaceCnf> update(@RequestBody @Validated ProjectSpaceCnf cnf) {
        return R.data(projectService.updateProjectSpaceCnf(cnf));
    }

    /**
     * 导入项目
     *
     * @param cnf 项目
     * @return 项目信息
     */
    @ApiOperation("导入项目")
    @PostMapping("/import")
    public R<ProjectSpaceCnf> importProject(@RequestBody @Validated ProjectDto.ImportReq cnf) {
        // TODO 导入项目
        // return null;
        return R.success();
    }

    /**
     * 导出项目
     *
     * @param cnf 项目
     * @return 项目信息
     */
    @ApiOperation("导出项目")
    @PostMapping("/export")
    public R<String> exportProject(@RequestBody @Validated ProjectDto.ExportReq cnf) {
        // TODO 导出项目
        List<String> ids = cnf.getIds();
        String exportPath = cnf.getPath();
        projectService.exportProjectByIds(ids, exportPath);
        return R.success();
    }
}
